/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.isil.tia.web;

import com.isil.tia.domain.Empleado;
import com.isil.tia.domain.EmpleadoNomina;
import com.isil.tia.domain.Nomina;
import com.isil.tia.domain.TipoEmpleado;
import com.isil.tia.service.EmpleadoService;
import com.isil.tia.service.NominaService;
import com.isil.tia.service.TipoEmpleadoService;
import java.util.HashMap;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

/**
 *
 * @author IVAN
 */
public class EmpleadoList extends MultiActionController {
    
    private EmpleadoService empleadoService;
    private NominaService nominaService;
    private TipoEmpleadoService tipoEmpleadoService;
    
    public void setEmpleadoService(EmpleadoService empleadoService) {
        this.empleadoService = empleadoService;
    }
    
    public void setNominaService(NominaService nominaService) {
        this.nominaService = nominaService;
    }
    
    public void setTipoEmpleadoService(TipoEmpleadoService tipoEmpleadoService) {
        this.tipoEmpleadoService = tipoEmpleadoService;
    }
    
    public ModelAndView loadEmpleados(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        
        return new ModelAndView("empleadoList", "empleados", getEmpleadoList(request));
    }
    
    public ModelAndView deleteEmpleado(HttpServletRequest request,
            HttpServletResponse response) {
        String id = request.getParameter("id");
        nominaService.deleteByIdEmpleado(Integer.parseInt(id));
        empleadoService.delete(Integer.parseInt(id));
        return new ModelAndView("empleadoList", "empleados", getEmpleadoList(request));
    }
    
    public ModelAndView loadCreateUpdateEmpleado(HttpServletRequest request,
            HttpServletResponse response) {
        HashMap hmLogica = new HashMap();
        Integer id = request.getParameter("id") != null ? Integer.parseInt(request.getParameter("id")) : 0;
        if (id != 0) {
            Empleado em = new Empleado();
            Nomina no = new Nomina();
            EmpleadoNomina emNo = new EmpleadoNomina();
            em = empleadoService.get(id);
            no = nominaService.getByIdEmpleado(id);
            emNo.setApe_empleado(em.getApe_empleado());
            emNo.setCant_piezas(no.getCant_piezas());
            emNo.setCant_ventas(no.getCant_ventas());
            emNo.setDireccion(em.getDireccion());
            emNo.setDni(em.getDni());
            emNo.setEmail(em.getEmail());
            emNo.setHoras_laboradas(no.getHoras_laboradas());
            emNo.setHoras_sobretiempo(no.getHoras_sobretiempo());
            emNo.setId_empleado(em.getId_empleado());
            emNo.setId_nomina(no.getId_nomina());
            emNo.setId_tipo_empleado(em.getId_tipo_empleado());
            emNo.setNom_empleado(em.getNom_empleado());
            emNo.setSueldo(em.getSueldo());
            hmLogica.put("objEmpleadoNomina", emNo);
        }
        
        hmLogica.put("listTipoEmpleados", tipoEmpleadoService.loadAll());
        return new ModelAndView("empleadoForm", "hmLogica", hmLogica);
    }
    
    public ModelAndView saveCreateUpdateEmpleado(HttpServletRequest request,
            HttpServletResponse response) {
        HashMap hmLogica = new HashMap();
        Empleado objEmpleado = new Empleado();
        Nomina objNomina = new Nomina();
        
        int tipoEmpleado = !request.getParameter("id_tipo_empleado").isEmpty() ? Integer.parseInt(request.getParameter("id_tipo_empleado")) : 0;
        int idempleado = !request.getParameter("idEmpleado").isEmpty() ? Integer.parseInt(request.getParameter("idEmpleado")) : 0;
        int idNomina = !request.getParameter("idNomina").isEmpty() ? Integer.parseInt(request.getParameter("idNomina")) : 0;
        String nom_empleado = !request.getParameter("nom_empleado").isEmpty() ? request.getParameter("nom_empleado") : "";
        String email = !request.getParameter("email").isEmpty() ? request.getParameter("email") : "";
        String apellido = !request.getParameter("ape_empleado").isEmpty() ? request.getParameter("ape_empleado") : "";
        String direccion = !request.getParameter("direccion").isEmpty() ? request.getParameter("direccion") : "";
        String dni = !request.getParameter("dni").isEmpty() ? request.getParameter("dni") : "";
        float sueldo = !request.getParameter("sueldo").isEmpty() ? Float.parseFloat(request.getParameter("sueldo")) : 0;
        
        
        if (tipoEmpleado == 6) {
            int horasLaboradas = request.getParameter("horas_laboradas") != null ? Integer.parseInt(request.getParameter("horas_laboradas")) : 0;
            int horasExtras = request.getParameter("horas_sobretiempo") != null ? Integer.parseInt(request.getParameter("horas_sobretiempo")) : 0;
            objNomina.setHoras_laboradas(horasLaboradas);
            objNomina.setHoras_sobretiempo(horasExtras);
        } else if (tipoEmpleado == 7) {
            int cantVentas = request.getParameter("cant_ventas") != null ? Integer.parseInt(request.getParameter("cant_ventas")) : 0;
            objNomina.setCant_ventas(cantVentas);
        } else if (tipoEmpleado == 8) {
            int cantPiezas = request.getParameter("cant_piezas") != null ? Integer.parseInt(request.getParameter("cant_piezas")) : 0;
            objNomina.setCant_piezas(cantPiezas);
        }
        
        objEmpleado.setNom_empleado(nom_empleado);
        objEmpleado.setApe_empleado(apellido);
        objEmpleado.setDireccion(direccion);
        objEmpleado.setEmail(email);
        objEmpleado.setDni(dni);
        objEmpleado.setSueldo(sueldo);
        objEmpleado.setId_tipo_empleado(tipoEmpleado);
        
        if (idempleado != 0) {
            objEmpleado.setId_empleado(idempleado);
            empleadoService.update(objEmpleado);
            objNomina.setId_nomina(idNomina);
            objNomina.setId_empleado(idempleado);
            nominaService.update(objNomina);
        }else{
            
           int idEmp= empleadoService.add(objEmpleado);
           objNomina.setId_empleado(idEmp);
           nominaService.add(objNomina);
        }
        
        return new ModelAndView("empleadoList", "empleados", getEmpleadoList(request));
    }
    
    private List<Empleado> getEmpleadoList(HttpServletRequest request) {
        List<TipoEmpleado> lstTipoEmp = tipoEmpleadoService.loadAll();
        List<Empleado> lstEmpleados = empleadoService.loadAll();
        
        for(Empleado empleado : lstEmpleados){
            for (TipoEmpleado tipo : lstTipoEmp) {
                if(empleado.getId_tipo_empleado()==tipo.getId_tipo_empleado()){
                    empleado.setDescTipoEmpleado(tipo.getDescripcion());
                }
            }
        }
        
        return lstEmpleados;
    }
}
